package com.study.stream;

import com.study.lambda.Employee;
import org.junit.Test;

import java.util.Optional;

/**
 * java8提供的针对空指针类
 * */
public class TestOpertion {

    /**
     * optional容器常用方法
     * Optional.of(T t):创建一个optional实例
     * optional.empty():创建一个空的optional实例
     * optional.ofNullable(T t):若t不为null,创建optional实例，否则创建空实例
     * isParent():判断是否包含值
     * orElse(T t):如果调用对象包含值，返回该值，否则返回t
     * orElseGet(Supplier s):如果调用对象包含值，返回该值，否则返回s获取的值
     * map(Function f):如果有值对其处理，并返回处理后的Optional,否则返回optional.empty()
     * flatMap(Function mapper):与map类似，要求返回值必须是optional
     * */
    @Test
    public void test1(){
        Optional<String> test = Optional.of("test");
        System.out.println(test.get());
        Optional<Object> empty = Optional.empty();
        //System.out.println(empty.get());//依旧会报空指针
        Optional<String> hello_word = Optional.ofNullable("hello word");//如果不为空创建，为空创建空实例
        if(hello_word.isPresent()){
            System.out.println(hello_word.get());
        }
        String test1 = hello_word.orElse("test");//返回hello word
        System.out.println(test1);

        Optional<Object> empty1 = Optional.empty();
        Object o = empty1.orElseGet(Employee::new);
        System.out.println(o);
        Optional<String> s = hello_word.map((x) -> "123");
        System.out.println(s.get());
        Optional<String> s1 = hello_word.flatMap((x) -> Optional.of("456"));
        System.out.println(s1.get());
    }

}
